package com.bjpowernode.threadpool;

import java.util.concurrent.*;

/**
 * ThreadPoolExecutor 七大参数
 *
 * @author Cat老师，关注我，抖音搜索：java512
 */
public class Test02 {

    public static void main(String[] args) {

        //基于Executor框架实现线程池 （此时线程池中一个线程也没有）
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                5,
                10,
                15,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(5),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardPolicy()
        );
        //当提交了一个工作任务，此时线程池中就有一个线程
        threadPoolExecutor.execute(() -> {
            System.out.println(Thread.currentThread().getName());
        });

        //关闭线程池
        //threadPoolExecutor.shutdown();

        /*//当核心线程处于空闲状态时候，允许销毁这些空闲的核心线程，默认是不允许销毁核心线程的
        threadPoolExecutor.allowCoreThreadTimeOut(true);

        //如果想创建线程池后，立刻就创建好线程，那么执行：
        threadPoolExecutor.prestartCoreThread();//初始化/创建一个核心线程
        threadPoolExecutor.prestartAllCoreThreads();//初始化/创建所有的核心线程

        for (int i = 0; i < 50; i++) {
            threadPoolExecutor.execute(() -> {
                System.out.println(Thread.currentThread().getName());
            });
        }

        threadPoolExecutor.shutdown();*/

        //不推荐的
        Executors.newSingleThreadExecutor();
        Executors.newCachedThreadPool();
    }
}